package com.xuyu.ddd.aggregate.core.aggregate;

import com.xuyu.ddd.aggregate.core.persistence.RepoUtil;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Set;

/**
 * 聚合类,聚合根 root对象即领域模型
 * @param <T>
 */
@Data
@Accessors(chain = true)
public class Aggregate<T extends Serializable> {

    /**
     * 聚合根
     */
    private T root;

    /**
     * 快照数据
     */
    private T snapShot;

    /**
     * 返回变化的字段
     */
    public Set<String> getRootChangedField() {
        return RepoUtil.getChangedFields(snapShot, root);
    }
}
